USB چیست و چگونه کار میکند

من اینجا پروتکل USB را به اندازه ای که برای شناخت و کاربرد این برنامه لازم است توضیح میدهم. برای شناخت و آشنایی بیشتر با پروتکل usb میتوانید به usb.org مراجعه کنید. یا در قسمت دانلود این وب سایت, فایل مربوط به آنرا ذخیره و مطالعه کنید. یکی از مهمترین قسمتهای این فایل بخش هشتم آن است. در این بخش شما به شکل و داده های این پروتکل آشنا میشوید.

توجه این توضیحات فقط برای دستگاه های یواس بی ( USB Device ) است و میزبان ( Host ) تعریفات و مشخصات مربوط به خود را دارد.

ارتباط usb در حقیقت یک ارتباط سریال (serial) است. در این پروتکل همیشه به یک میزبان ( PC = host ) احتیاج است و تبادل داده ها هم همیشه از طرف میزبان انجام میشود. این به این معنی است که دستگاهی ( device ) که به پورت USB وصل میشود هیچگاه خودش نمی تواند برای میزبان داده بفرستد و این میزبان است که همیشه اعلام میکند که آیا داده میفرستد و یا داده میخواهد. به همین دلیل اگر اینجا از In-Port یا IN-Token و Out-Port یا OUT-Token استفاده میشود , آن از دید میزبان گفته میشود.
In-port ; IN-Token یعنی که میزبان داده یا اطلاعات میخواهد و Out-Port ; OUT-Token به معنای بر عکس آن است و میزبان داده میفرستد.

نسخه های یواس بی از USB 1.0 شروع شده و بعد به USB 2.0 تبدیل شده و هر حال حاضر جدیدترین نسخه آن USB 3.1 و USB On The Go است.
در نسخه USB On The Go یک دستکاه میتواند به میزبان و بر عکس تبدیل شود. یعنی شما در انتخاب میزبان آزادی دارید.

USB دارای 5 سرعت برای انتقال اطلاعات است.

Low Speed Full Speed High Speed Super Speed Super Speed +
1.5 Mbits/s 12 Mbits/s 480 Mbits/s 5 Gbits/s 10 Gbits/s


برای استعاده معمولی فقط 3 سرعت Low ,Full, High دارای اهمیت میباشد.

اتصالات معمولی و رایج یو اس بی به صورت زیراست



استاندارد تعریف شده برای پایه های اتصالات نیز بدینگونه است:

نوع A و B دارای 4 اتصال بدین شکل:

Pin شماره 1 2 3 4
Color رنگ قرمز سفید سبز سیاه
Function عملکرد +5 ولت +D -D زمین


و برای نوع مینی و میکرو دارای 5 اتصال بدین صورت:

Pin شماره 1 2 3 4 5
Color رنگ قرمز سفید سبز تعریف نشده سیاه
Function عملکرد +5 ولت +D -D برای مشخص کردن نوع Type A و یا Type B
Typ A: زمین (دستگاه وصل شده Host است)
Typ B: وصل نشده (دستگاه وصل شده Device است)
زمین


در نوع Micro-AB و Micro-B دو جفت اتصال اضافی وجود دارند که فقط توسط USB 3.0 استفاده میشود.
عملکرد آنها بدینصورت تعریف شده:
Pin 6 = SSTx−
Pin 7 = SSTx+
Pin 8 = Ground
Pin 9 = SSRx−
Pin 10 = SSRx+

در استاندارد یواس بی مشخصات فنی این اتصالات مثل طول کابل, نوع آن و غیره بطور کامل توضیح داده شده است.

حداکثر دستگاههایی که به یک پورت یو اس بی میتواند وصل شود به 127 محدود است.
استفاده از رابط تقسیم کننده ( Hub ) این اجازه را میدهد که از دستگاههایی با سرعت های متفاوت در یک پورت همزمان استفاده کرد.

تعیین سرعت توسط دستگاه به میزبان گفته میشود بدین صورت که اگر دستگاه توسط یک مقاومت با مقدار 1500 اهم با %5 خطا خط +D را به 3.3 ولت وصل کند میزبان میفهمد که دستکاه وصل شده دارای Full speed است و اگر خط -D را به 3.3 ولت وصل کند دارای Low speed است.



برای HighSpeed دستگاه از شکل FullSpeed استفاده میکند ولی در هنگام Enumeration زمانی که میزبان یک ریست (10...20mS) انجام میدهد دستگاه خط -D را به 3.3 ولت وصل میکند در این هنگام اگر میزبان سرعت HighSpeed را پشتیبانی کند بطور متناوب هر دو خط +D و -D را بطور متناوب به حالتهای منطقی صفر و یک درمیاورد به دستگاه نشان میدهد که از HighSpeed پروتکل پشتیبانی میکند. در اصطلاح فنی به این کار chriping نیز میگویند.

یک دستگاه میتواند یا خودش منبع تغذیه داشته باشد یا از پورت یو اس بی تغذیه شود. برای استفاده از پورت یو اس بی میتواند آنرا به دو صورت انجام دهد اولی Low-power bus powered نام دارد و دستگاه باید حداکثر 100 میلی آمپر جریان مصرف کند و با حداقل ولتاژ 4.4 ولت و حداکثر 5.25 ولت کار کند.
دومی High-power bus powered نام دارد و دستگاه میتواند تا حداکثر 500 میلی آمپر جریان مصرف کند. این اضافه جریان را باید در حین enumeration در شناسه configuration descriptor به میزبان اطلاع دهد.
در تعریف یو اس بی یک واحد جریان برابر است با 100 میلی آمپر و هیچ دستگاهی حق ندارد بیشتر از آنکه به میزبان اطلاع داده مصرف کند.
در تعریفات یو اس بی نکات مهم دیگری نیز برای تغذیه دستکاه تعریف شده اند که اگر برای یو اس بی دستگاهی طراحی میکنید باید آنها را رعایت کنید.
طول زمان یک پاکت اطلاعات 1 میلی ثانیه است و بر خلاف پروتکل سریال دارای شکل مشخص و تعریف شده ای از داده ها است.


وقتی که ما یک دستگاه را به پورت USB وصل میکنیم, میزبان یک روش استاندارد که به آن Enumration میگویند را انجام میدهد . در این روش که برای همه دستگاه ها (ماوس, کیبورد, فلاش مموری, دوربین, ...) انجام میشود توسط میزبان اطلاعاتی از دستگاه گرفته و هم به آن داده میشود. اگر این مرحله درست انجام نشود میزبان نمیتواند از دستگاه استفاده کند.
این Enumeration دارای چند مرحله بصورت زیر است .
  • host یک ریست reset انجام میدهد. در این حالت دستگاه نه آدرسی دارد و نه تنظیم ( configured ) شده است.
  • host تقاضای شناسه اصلی ( Device Descriptor ) را میکند.
  • host دوباره یک ریست انجام میدهد.
  • host یک آدرس مشخص و اختصاصی به دستگاه میدهد.
  • host دوباره تقاضای شناسه میکند ولی اینبار با آدرسی که داده است.
  • host تقاضای لیست تنضیمات ( configuration ) را میکند.
از این مرحله به بعد اگر دستگاه دارای تنضیمات خاصی نباشد , دستگاه آماده استفاده است.
تمام اطلاعاتی را که میزبان لازم دارد در این 2 شناسه ( Device Descriptor ) و ( Device Configuration ) وجود دارد. در بخش هشتم از فایل usb-chapters.pdf اینها بطور کامل توضیح داده شده است.
هر دستگاه ( Device ) برای ارتباط با میزبان از مسیر یا کانال استفاده میکند که به آن ( Endpoint ) میگویند.
USB 2.2 میتواند حداکثر از 32 کانال ( Endpoint ) استفاده کند که این مدارات مجتمع ( PIC18F4550 یا PIC18F2455 ) قابلیت استفاده از 16 کانال را در سخت افزار داخلی خود میدهند.
هر USB device باید کانال 0 ( Endpoint0 ) را داشته باشد, چون میزبان از این کانال برای Enumration استفاده میکند. من در این برنامه فقط از کانال 1 ( Endpoint 1 ) استفاده کرده ام. هر کانال میتواند فقط یکی از حالات ( In - Out ) را داشته باشد بغیر از کانال 0 که دارای حالت ( In- Out ) در آن واحد است.
برای تبادل یا انتقال اطلاعات از 4 فرم استفاده میشود که هر کدام مزایا و معایب خود را دارند. این 4 فرم عبارت است از :
  • Control
  • Intrrupt
  • Isochronous
  • Bulk
کانال 0 ( Endpoint0 ) فقط از فرم کنترل ( Control ) استفاده میکند چون این فرم دارای اجازه بالا ( high Priority ) است و خطای ارتباطی ( packt Error ) ندارد.

بالا پایین


...ادامه دارد